home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / test_StringIO.py < prev    next >
Text File  |  2005-10-18  |  4KB  |  137 lines

  1. # Tests StringIO and cStringIO
  2.  
  3. import unittest
  4. import StringIO
  5. import cStringIO
  6. import types
  7. from test import test_support
  8.  
  9.  
  10. class TestGenericStringIO(unittest.TestCase):
  11.     # use a class variable MODULE to define which module is being tested
  12.  
  13.     # Line of data to test as string
  14.     _line = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!'
  15.  
  16.     # Constructor to use for the test data (._line is passed to this
  17.     # constructor)
  18.     constructor = str
  19.  
  20.     def setUp(self):
  21.         self._line = self.constructor(self._line)
  22.         self._lines = self.constructor((self._line + '\n') * 5)
  23.         self._fp = self.MODULE.StringIO(self._lines)
  24.  
  25.     def test_reads(self):
  26.         eq = self.assertEqual
  27.         self.assertRaises(TypeError, self._fp.seek)
  28.         eq(self._fp.read(10), self._line[:10])
  29.         eq(self._fp.readline(), self._line[10:] + '\n')
  30.         eq(len(self._fp.readlines(60)), 2)
  31.  
  32.     def test_writes(self):
  33.         f = self.MODULE.StringIO()
  34.         self.assertRaises(TypeError, f.seek)
  35.         f.write(self._line[:6])
  36.         f.seek(3)
  37.         f.write(self._line[20:26])
  38.         f.write(self._line[52])
  39.         self.assertEqual(f.getvalue(), 'abcuvwxyz!')
  40.  
  41.     def test_writelines(self):
  42.         f = self.MODULE.StringIO()
  43.         f.writelines([self._line[0], self._line[1], self._line[2]])
  44.         f.seek(0)
  45.         self.assertEqual(f.getvalue(), 'abc')
  46.  
  47.     def test_writelines_error(self):
  48.         def errorGen():
  49.             yield 'a'
  50.             raise KeyboardInterrupt()
  51.         f = self.MODULE.StringIO()
  52.         self.assertRaises(KeyboardInterrupt, f.writelines, errorGen())
  53.  
  54.     def test_truncate(self):
  55.         eq = self.assertEqual
  56.         f = self.MODULE.StringIO()
  57.         f.write(self._lines)
  58.         f.seek(10)
  59.         f.truncate()
  60.         eq(f.getvalue(), 'abcdefghij')
  61.         f.truncate(5)
  62.         eq(f.getvalue(), 'abcde')
  63.         f.write('xyz')
  64.         eq(f.getvalue(), 'abcdexyz')
  65.         f.close()
  66.         self.assertRaises(ValueError, f.write, 'frobnitz')
  67.  
  68.     def test_closed_flag(self):
  69.         f = self.MODULE.StringIO()
  70.         self.assertEqual(f.closed, False)
  71.         f.close()
  72.         self.assertEqual(f.closed, True)
  73.         f = self.MODULE.StringIO("abc")
  74.         self.assertEqual(f.closed, False)
  75.         f.close()
  76.         self.assertEqual(f.closed, True)
  77.  
  78.     def test_iterator(self):
  79.         eq = self.assertEqual
  80.         unless = self.failUnless
  81.         eq(iter(self._fp), self._fp)
  82.         # Does this object support the iteration protocol?
  83.         unless(hasattr(self._fp, '__iter__'))
  84.         unless(hasattr(self._fp, 'next'))
  85.         i = 0
  86.         for line in self._fp:
  87.             eq(line, self._line + '\n')
  88.             i += 1
  89.         eq(i, 5)
  90.  
  91. class TestStringIO(TestGenericStringIO):
  92.     MODULE = StringIO
  93.  
  94.     def test_unicode(self):
  95.  
  96.         if not test_support.have_unicode: return
  97.  
  98.         # The StringIO module also supports concatenating Unicode
  99.         # snippets to larger Unicode strings. This is tested by this
  100.         # method. Note that cStringIO does not support this extension.
  101.  
  102.         f = self.MODULE.StringIO()
  103.         f.write(self._line[:6])
  104.         f.seek(3)
  105.         f.write(unicode(self._line[20:26]))
  106.         f.write(unicode(self._line[52]))
  107.         s = f.getvalue()
  108.         self.assertEqual(s, unicode('abcuvwxyz!'))
  109.         self.assertEqual(type(s), types.UnicodeType)
  110.  
  111. class TestcStringIO(TestGenericStringIO):
  112.     MODULE = cStringIO
  113.  
  114. import sys
  115. if sys.platform.startswith('java'):
  116.     # Jython doesn't have a buffer object, so we just do a useless
  117.     # fake of the buffer tests.
  118.     buffer = str
  119.  
  120. class TestBufferStringIO(TestStringIO):
  121.     constructor = buffer
  122.  
  123. class TestBuffercStringIO(TestcStringIO):
  124.     constructor = buffer
  125.  
  126.  
  127. def test_main():
  128.     test_support.run_unittest(
  129.         TestStringIO,
  130.         TestcStringIO,
  131.         TestBufferStringIO,
  132.         TestBuffercStringIO
  133.     )
  134.  
  135. if __name__ == '__main__':
  136.     test_main()
  137.